ﺳﺎﺧﺘﺎرھﺎی ﺗﺼﻤﯿﻢ ﮔﯿﺮی
در ﺑﺴﯿﺎری از ﻣﻮارد ھﻨﮕﺎم ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻻزم اﺳـﺖ ﺗـﺎ از ﻋﺒـﺎرات ﺷـﺮﻃﻲ اﺳـﺘﻔﺎده ﻛﻨـﯿﻢ. ﺑـﺮای اﻧﺠـﺎم اﻳﻨﻜـﺎر دو روش ﻋﻤﺪه وﺟﻮد دارد. اﺳﺘﻔﺎده از if و ﻳﺎ . switchاز if ﺑﯿـﺸﺘﺮ ﺑـﺮای ﻣﻘﺎﻳـﺴﻪ ھـﺎی ﺗﻜـﻲ و ﻛﻮﭼـﻚ اﺳـﺘﻔﺎده ﻣـﻲ ﺷﻮد و ﺣﺎﺻﻞ ﻣﻘﺎﻳﺴﻪ ی آن ﻳﺎ true اﺳﺖ و ﻳﺎ . falseاز ﻋﺒﺎرت switchھﻨﮕﺎﻣﻲ اﺳﺘﻔﺎده ﻣـﻲ ﺷـﻮد ﻛـﻪ ﻣﻘﺎﻳـﺴﻪ ھﺎی ﻣﺘﻌﺪدی ﺑﺎﻳﺪ در ﻣﻮرد ﻳﻚ ﻣﻘﺪار ﺻﻮرت ﮔﯿﺮد.
ھﺮ دو ﻋﺒﺎرت if و switchﺗﻮﺳﻂ ﻋﺒﺎرﺗﮫﺎی Boolean ﻛﻨﺘﺮل ﻣﻲ ﺷﻮﻧﺪ( trueو ﻳﺎ . ( falseدر ھﻨﮕـﺎم اﺳـﺘﻔﺎده از if اﮔﺮ ﻋﺒﺎرت Boolean ﺣﺎﺻﻞ اش trueﺑﺎﺷﺪ اوﻟﯿﻦ ﻗﺴﻤﺖ ﺷﺮط اﺟﺮا ﻣﻲ ﺷـﻮد و ﺳـﭙﺲ ﺑﺮﻧﺎﻣـﻪ از اﻧﺘﮫـﺎی if اداﻣـﻪ ﭘﯿﺪا ﻣﻲ ﻛﻨﺪ. اﮔﺮ ﺣﺎﺻﻞ ﻋﺒﺎرت Boolean ﻣﺴﺎوی false ﺑﺎﺷﺪ ﻛﻨﺘﺮل ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻗﺴﻤﺖ else ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮد.
ﻣﺜﺎل :
ﻳﻚ ﭘﺮوژه ی ﺟﺪﻳﺪ consoleﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧﺮا ex۴۰ ﺑﮕﺬارﻳﺪ. ﺳﭙﺲ ﻛﺪ زﻳﺮ را در آن وارد و اﺟﺮا ﻛﻨﯿﺪ :
;using System
namespace ex۴۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;("Console.WriteLine("Enter ۱ character to be evaluated
;()char cUserInput = (char) Console.Read
( ( if ( char.IsDigit ( cUserInput
;("!Console.WriteLine("The char is a number
else
;("!Console.WriteLine("The char is not a number
{
{
{
ﻧﻜﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
ﺳﻲ ﺷﺎرپ ﺑﻪ ﻛﻮﭼﻜﻲ و ﺑﺰرﮔـﻲ ﺣـﺮوف ﺣـﺴﺎس اﺳـﺖ . ﺑـﺮای ﻣﺜـﺎل cUserInputﺑـﺎ cUserinput ﻓﺮق ﻣﻲ ﻛﻨﺪ.
ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﺑﻌﺪ از if ﭘﺮاﻧﺘﺰھﺎ ذﻛﺮ ﮔﺮدد.
ﺣﺘﻤﺎ ﺑﺎﻳﺪ داﺧﻞ if ﻳﻚ ﻋﺒﺎرت Boolean ذﻛﺮ ﺷﻮد ﻣﺎﻧﻨﺪ ( ۵>. if( x
در ﺳـﻲ ﺷـﺎرپ ﻣﻘﺎﻳـﺴﻪ ی ﺗـﺴﺎوی دو ﻋﺒـﺎرت ﺑـﺎ == و اﻧﺘـﺴﺎب ﺑـﺎ = اﻧﺠـﺎم ﻣـﻲ ﺷـﻮد.
ﻣﻮاردی ھﺴﺘﻨﺪ ﻛﻪ اﻏﻠﺐ ﺗﺎزه ﻛﺎران ﺑﺎ آن ﻣﺸﻜﻞ دارﻧﺪ! ﺑﺮای ﻣﺜﺎل ( ۳== if ( iﺻﺤﯿﺢ اﺳﺖ اﻣـﺎ (۳ = if ( iدر ﺳﻲ ﺷﺎرپ ﻣﻌﻨﺎﻳﻲ ﻧﺪارد.
اﮔﺮ ﺑﻌﺪ از if ﻳﻚ ﺧﻂ ﻛﺪ ﻗﺮار ﮔﯿﺮد ﻧﯿﺎزی ﺑﻪ آوردن آﻛﻮﻻد ھﺎ ﻧﯿﺴﺖ. ھﻨﮕﺎﻣﻲ ﻧﯿﺎز ﺑﻪ آﻛﻮﻻدھﺎ ﻣﻲ ﺑﺎﺷﺪ ﻛـﻪ ﺑﯿﺶ از ﻳﻚ ﺧﻂ ﺑﺎﻳﺪ ﺑﻌﺪ از if ﻗﺮار ﮔﯿﺮد.
ھﻤﺎﻧﻄﻮر ﻛﻪ ذﻛﺮ ﺷﺪ در ﺳﻲ ﺷﺎرپ ھﻤﻪ ﭼﯿـﺰ ﺷـﻲء اﺳـﺖ ﺣﺘـﻲ ﻧـﻮع ھـﺎی ﭘﺎﻳـﻪ اﻳـﻲ ﻣﺎﻧﻨـﺪ . charﺑـﺎ اﺳﺘﻔﺎده از ﻣﺘﺪ IsDigitآن ﻣﻲ ﺗﻮان ﭼﻚ ﻛﺮد ﻛﻪ آﻳﺎ ورودی آن ﻋﺪد اﺳﺖ ﻳﺎ ﺧﯿﺮ؟ ( در ﻣﻮرد ﻣﺘـﺪھﺎ ﺻـﺤﺒﺖﺧﻮاھﺪ ﺷﺪ. )
اﺳﺘﻔﺎده از : switch
ﺑﮫﺘﺮ اﺳﺖ اﻳﻦ ﻣﻮرد را ﺑﺎ ﻳﻚ ﻣﺜﺎل دﻧﺒﺎل ﻛﻨﯿﻢ.
ﭘﺮوژه ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪی ﺑﻪ ﻧﺎم ex۵۰ در ﺣﺎﻟﺖ consoleدر VS.NETﺑﺎز ﻛﻨﯿﺪ. دراﻳﻨﺠﺎ ﻣـﻲ ﺧـﻮاھﯿﻢ ﻳـﻚ ﻛـﻼس ﺟﺪﻳﺪ ﺗﻌﺮﻳﻒ ﻛﺮده و ﺗﻮﺳﻂ ﺧﺎﺻﯿﺘﻲ ﻛﻪ در آن اﻳﺠﺎد ﻣﻲ ﻛﻨﯿﻢ ﻣﺘﻮﺟﻪ ﺷـﻮﻳﻢ روز ﺟـﺎری ﻣﻄـﺎﺑﻖ ﺳﯿـﺴﺘﻢ ﭼـﻪ روزی اﺳﺖ .
ﻳﻚ ﻛﻼس ﺟﺪﻳﺪ از ﻣﻨﻮی ﭘﺮوژه ،ﺑﺎ اﺳﺘﻔﺎده از ﮔﺰﻳﻨﻪ ی Add class ﺑﻪ ﺑﺮﻧﺎﻣﻪ اﺿﺎﻓﻪ ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا در اﺑﺘـﺪا clsDate ﺑﮕﺬارﻳﺪ.
;using System
namespace ex۵۰
}
<///
public class clsDate
}
()public clsDate
}
//
// TODO: Add constructor logic here
//
{
public string systemDayOfWeek
}
get
{
string res="";
switch( System.DateTime.Now.DayOfWeek.ToString())
{
case "Saturday" :
res = ";"ﺷﻨﺒﻪ
break;
case "Sunday" :
res = "; "ﺷﻨﺒﻪ ﯾﮏ
break;
case "Monday":
res = ";"دوﺷﻨﺒﻪ
break;
case "Tuesday":
res = ";"ﺷﻨﺒﻪ ﺳﻪ
break;
case "Wednesday":
res = ";"ﺷﻨﺒﻪ ﭼﻬﺎر
break;
case "Thursday":
res = ";"ﺷﻨﺒﻪ ﭘﻨﺞ
break;
case "Friday":
res = "; "ﲨﻌﻪ
break;
}
return res ;
{
{
{
{
ھﻨﮕﺎم ذﺧﯿﺮه ﻛﺮدن اﻳﻦ ﻛﺪ وﻳﮋوال اﺳﺘﻮدﻳﻮ ﺑﻪ ﺷﻤﺎ اﺧﻄﺎر ﻣﻲ دھﺪ ﻛﻪ ﻛﺪ دارای ﺣﺮوف ﻳﻮﻧﯿﻜﺪ اﺳﺖ. از ﻣﻨﻮی ﻓﺎﻳـﻞ گزینه Advanced Save Option را انتخاب کنید. در اﻳﻨﺠﺎ ﻣﻲ ﺗﻮان ﻧﻮع ذﺧﯿﺮه ﺳﺎزی را ﻳﻮﻧﯿﻜﺪ اﻧﺘﺨﺎب ﻛﺮد. ﺑﺮای اﺳﺘﻔﺎده از ﻛﻼس ﻓﻮق ﻣﺎﻧﻨﺪ ﻣﻄﺎﻟﺒﻲ ﻛﻪ در ﻗﺴﻤﺖ ﻗﺒﻞ ﮔﻔﺘﻪ ﺷﺪ ﻋﻤﻞ ﻣﻲ ﻛﻨﯿﻢ :
using System;
namespace ex۰۵
{
class Class۱
{
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate();
;( Console.WriteLine( m_var.systemDayOfWeek
;()Console.ReadLine
{
{
{
ھﺮ ﭼﻨﺪ ﺣﺎﻟﺖ consoleﻳﻮﻧﯿﻜﺪ را ﭘﺸﺘﯿﺒﺎﻧﻲ ﻧﻤﻲ ﻛﻨﺪ وﻟﻲ اﺻﻞ ﺑﺮﻧﺎﻣﻪ ﺑﺮای ﻣﺎ ﻣﮫـﻢ اﺳـﺖ و در آﻳﻨـﺪه ﺑﯿـﺸﺘﺮ از آن اﺳﺘﻔﺎده ﺧﻮاھﯿﻢ ﻛﺮد.
ھﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻼﺣﻈﻪ ﻛﺮدﻳﺪ اﮔﺮ از switchاﺳﺘﻔﺎده ﻧﻤﻲ ﺷﺪ ﺑﺎﻳﺪ از ٧ ﻋﺪد if اﺳﺘﻔﺎده ﻣـﻲ ﮔﺮدﻳـﺪ ﻛـﻪ اﺻـﻼ ﻇـﺎھﺮ ﺣﺮﻓﻪ ای و ﺷﻜﯿﻠﻲ ﻧﺪاﺷﺖ!
ﺑﺎ اﺳﺘﻔﺎده از ﻋﺒﺎرت زﻳﺮ ﻛﺎر ﻣﻘﺎﻳﺴﻪ ﺷﺮوع ﻣﻲ ﺷﻮد. روز ﺳﯿﺴﺘﻢ درﻳﺎﻓﺖ ﺷﺪه و وارد ﺑﺪﻧﻪ ی switch ﻣﻲ ﮔـﺮدد.
ﺳﭙﺲ ﺗﻮﺳﻂ case ھﺎ ﭼﻚ ﻣﻲ ﺷﻮد ﺗﺎ ﺗﺴﺎوی آن ﺑﺎ ﻋﺒﺎرت ﺑﻌﺪ از case ﺑﻪ اﺛﺒﺎت ﺑﺮﺳﺪ.
;(()switch( System.DateTime.Now.DayOfWeek.ToString
اﮔﺮ ھﺮ ﻛﺪام از ﻋﺒﺎرات ﺑﻌﺪ از case ﺻﺤﯿﺢ ﺑﻮدﻧـﺪ بعلت وجود دستور Break برنامه از Switch خارج میشد و در غیر اینصورت به بررسی دیگر Case ها میپرداخت.
اﮔﺮ ھﯿﭽﻜﺪام از caseھﺎ ﺻﺤﯿﺢ ﻧﺒﻮدﻧﺪ ﻣﻲ ﺗﻮان از ﮔﺰﻳﻨﻪ ی defaultھﻢ در ﺻﻮرت ﻧﯿﺎز اﺳﺘﻔﺎده ﻛـﺮد.
منبع : سایت VCsharp.ir
نظرات شما عزیزان: